/**
 * Clase Ventana
 * @author David Candia Martin
 * @version 1.0 - 03/12/13
 */


import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;

public class View extends JFrame {

    private Escribir escribir;
    private Leer leer;

    private JPanel panel;
    private static int ancho = 140, alto = 200;

    private File directorio;            //Para listar el directorio
    private String[] archivos;          //Lista con archivos disponibles

    private JButton btn_crearBinario;   //Boton "Crear binario"
    private JButton btn_leerBinario;    //Boton "Leer binario"
    private JLabel lbl_archivos;        //Etiqueta "Archivos disponibles"
    private JTextArea txta_archivos;    //Area para los archivos
    private JTextArea txta_texto;       //Area para el texto
    private JScrollPane sp_texto;       //Panel con scroll para el JTA del texto

    /**
     * Constructor
     */
    public View() {
        //Panel
        panel = new JPanel();

        directorio = new File("recursos/documentos/");
        archivos = directorio.list();

        //Instancia de componentes
        btn_crearBinario = new JButton();
        btn_leerBinario = new JButton();
        lbl_archivos = new JLabel();
        txta_archivos = new JTextArea();

        //Botones
        //+ Crear binario
        btn_crearBinario.setText("Crear binario");
        btn_crearBinario.setToolTipText("Crea un archivo binario con texto");
        btn_crearBinario.setBounds(5, 5, 140, 25);
        panel.add(btn_crearBinario);
        //+ Leer binario
        btn_leerBinario.setText("Leer binario");
        btn_leerBinario.setToolTipText("Lee el archivo binario creado");
        btn_leerBinario.setBounds(5, 180, 140, 25);
        btn_leerBinario.setEnabled(false);
        panel.add(btn_leerBinario);

        //Etiqueta
        lbl_archivos.setText("Archivos disponibles:");
        lbl_archivos.setBounds(5, 35, 140, 30);
        panel.add(lbl_archivos);

        //Area de texto para los archivos disponibles
        txta_archivos.setBounds(5, 65, 140, 80);
        txta_archivos.setEditable(false);
        txta_archivos.setText(" - " + archivos[0]);
        panel.add(txta_archivos);

        //Listeners
        //+ Boton "Crear binario"
        btn_crearBinario.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                crear_archivo();
                btn_crearBinario.setEnabled(false);
                btn_leerBinario.setEnabled(true);
            }
        });
        //+ Boton "Leer binario"
        btn_leerBinario.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                leer_archivo();
                //Eliminamos el archivo binario (se borra al cerrar el programa
                //porque es cuando deja de estar en uso)
                directorio = new File(directorio.getPath()+"\\QUIJOTE.bin");
                directorio.delete();
            }
        });

        //Panel
        panel.setLayout(null);
        panel.setPreferredSize(new Dimension(ancho, alto));
        
        //Ventana
        setTitle("De plano a binario");
        setContentPane(panel);
        pack();
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);

    }

    /**
     * Crea un archivo binario, a partir del archivo de texto contenido en la
     * carpeta "recursos" del proyecto.
     */
    public void crear_archivo() {

        //Enviamos la ruta y el nombre del archivo de texto
        escribir = new Escribir(directorio, archivos[0]);
        //Listamos el directorio y lo guardamos en un vector
        archivos = directorio.list();
        //"Borramos" el contenido del area de texto
        txta_archivos.setText("");
        //Copiamos los archivos del directorio en el area de texto
        for (int i = 0; i < archivos.length; i++) {
            if (i > 0) {
                txta_archivos.append("\n");
            }
            txta_archivos.append(" - " + archivos[i]);
        }

    }

    /**
     * Lee el archivo binario creado al pulsar sobre el boton "Crear binario".
     */
    public void leer_archivo() {

        String[] libro_binario;
        File archivo_binario;

        //Comprobamos que el binario esta creado
        if (archivos.length > 1) {
            archivo_binario = new File(directorio + "\\QUIJOTE.bin");
            //Le pasamos el archivo binario a "Leer"
            leer = new Leer(archivo_binario);

            txta_texto = new JTextArea();           //Para el texto del binario
            sp_texto = new JScrollPane(txta_texto); //Panel con scroll

            //Area de texto
            libro_binario = leer.leer_binario();
            for (int i = 0; i < libro_binario.length - 1; i++) {
                txta_texto.append(libro_binario[i]);
            }
            //Area de texto
            txta_texto.setEditable(false);
            txta_texto.setLineWrap(true);       //Inserta saltos de linea automaticamente
            txta_texto.setWrapStyleWord(true);  //Hace que las palabras no se corten en los saltos de linea
            //ScrollPane
            sp_texto.setAutoscrolls(false);
            sp_texto.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
            sp_texto.setBounds(ancho + 10, 5, ancho * 2 - 15, alto);
            panel.add(sp_texto);
            //Redimension de la ventana
            ancho += ancho * 2;
            alto += 10;
            panel.setPreferredSize(new Dimension(ancho, alto));
            //Inhabilita el boton
            btn_leerBinario.setEnabled(false);
            pack();
            repaint();
            
        } else {
            JOptionPane.showMessageDialog(null, "El archivo binario no esta disponible. Haga clic sobre el boton 'Crear binario'.");
        }

    }

}
